Ext.require([
	 'Ext.grid.*',
	 'Ext.window.Window',
	 'Ext.container.Viewport',
	 'Ext.layout.container.Border',
	 'Ext.state.*',
	 'Ext.data.*',
	 'Ext.tree.*'
]);

/**
 * Au chargement, on recupere le parametrage.
 */
function parametrage() {
	$.ajax({
 		traditional: true, 
 		type: 'POST', 
 		url: './parametrageProduit.do',
 		target: "_blank", 
 		data : {},
 		error: function () {},
 		success: function(result) {
 			if (!result.adminSR) {
 				$("#centerAdminId").html('<div align="center" style="padding-top:20px;color:red;font-size:16px;">Vous ne disposez pas des droits d\'administration !!!</div>');
 			} else {
	 			// Reinitialisation des variables globales 
	 			marchesOptionsDisplay = new Array();
	 			tabOrigines = new Array();
	 			
	 			// Produit selectionné 
	 			cs_adm_pdt_selected = result.cs_adm_pdt;
	 			
	 			// Liste des presentations 
	 			var presentations = result.presentations;
	 			indexTabPresentations = 0;
	 			tabPresentations = new Array();
	 			if (presentations != undefined && presentations != null) {
	 				for (pres in presentations) {
	 					var presentation = new Object();
	 					presentation.index = indexTabPresentations; 
	 					presentation.cs_adm_prstn = presentations[pres].cs_adm_prstn;
	 					presentation.cs_adm_rgpt = presentations[pres].cs_adm_rgpt;
	 					presentation.origine = presentations[pres].origine;
	 					presentation.marche = presentations[pres].marche;
	 					presentation.cs_prod_hier = presentations[pres].cs_prod_hier;
	 					presentation.cs_presentation = presentations[pres].cs_presentation;
	 					presentation.presentation = presentations[pres].presentation;
	 					presentation.cip = presentations[pres].cip;
	 					presentation.affect = presentations[pres].affect; 
	 					tabPresentations.push(presentation);
	 					indexTabPresentations++;
	 				}
	 			}
	 			
	 			// Liste deroulante des origines 
	 			origineOptions = "";
	 			for (or in result.origines) {
	 				origineOptions += '<option value="' + result.origines[or].code +'">' + result.origines[or].libelle + '</option>';
	 			}
	 			
	 			// Liste des marches
	 			firstCodeOrigineOptions = result.origines[0].code; // premier marché 
	 			listeMarches(firstCodeOrigineOptions, "");
	 			
	 			// Produit
	 			$('#libelleMarche').val(result.lib_marche);
	 			$('#libelleProduit').val(result.lib_pdt);
	 			if (result.code_data != '') {
	 				$('#codeDataId').val(result.code_data);
	 			} else {
	 				$('#csSrcId').val('UN');
	 			}
	 			var listeSource = ""; // Chargement de la liste des sources
	 			for (source in result.sources) {
	 				listeSource += '<option value="' + result.sources[source].code +'">' + result.sources[source].libelle + '</option>';
	 			}
	 			$('#csSrcId').html(listeSource);
	 			if (result.cs_src != '') {
	 				$('#csSrcId').val(result.cs_src); // Choix de la source dans la liste 
	 			} else {
	 				$('#csSrcId').val(-1);
	 			}
	 			var listeProduit = ""; // Chargement de la liste des produits sampilot 
	 			for (prod in result.produits) {
	 				listeProduit += '<option value="' + result.produits[prod].code +'">' + result.produits[prod].libelle + '</option>';
	 			}
	 			$('#sampilotId').html(listeProduit);
	 			$('#sampilotId').val(result.cs_product); // Choix du produit dans la liste 
	 			
	 			// Liste des divisions 
	 			tabDivisions = new Array();
	 			listeDivisions(result.cs_product);
	 			
	 			// Liste des indicateurs
	 			// TODO:
	 			listeIndicateurs(result.indicateurs);
	 			
	 			// Regroupements 
	 			var htmlRgpts = "";
	 			var firstRgpt = 0;
	 			if (result.regroupements != undefined && result.regroupements != null) {
	 				for (rgpt in result.regroupements) {
	 					if (rgpt == 0) { // le premier regroupement est selectionné 
	 						firstRgpt = result.regroupements[rgpt].cs_adm_rgpt;
	 						htmlRgpts += affichageRgpt(result.regroupements[rgpt], true);
	 					} else {
	 						htmlRgpts += affichageRgpt(result.regroupements[rgpt], false);
	 					}
	 				}
	 			}
	 			$('#regroupements').html(htmlRgpts);
	 			// Applique les couleurs pour les regroupements
	 			if (result.regroupements != null) {
	 				for (rgpt in result.regroupements) {
	 					$('#couleurRgpt' + result.regroupements[rgpt].cs_adm_rgpt).spectrum({
	 		 				color: result.regroupements[rgpt].code_couleur_rgpt
	 		 			});
	 				}
	 			}
	 			
	 			// On simule un clic sur le premier regroupement 
	 			if (firstRgpt != 0) {
	 				selectRgpt(firstRgpt);
	 			}
 			}
 		}
	});
}


/**
 * Table affichant la liste des divisions.
 */
function listeDivisions(cs_product) {
	$.ajax({
 		traditional: true, 
 		type: 'POST', 
 		url: './listeDivisions.do',
 		target: "_blank", 
 		data : {
 			cs_product: cs_product
 		},
 		error: function () {},
 		success: function(result) {
 			$('#listeDivisions').empty(); 
 			if (result.data.length > 0) {
 				tabDivisions = new Array();
 				for (divIndex in result.data) {
 					var division = new Object();
 					division.index = divIndex;
 					division.cs_network = result.data[divIndex].cs_network;
 					division.reseau = result.data[divIndex].reseau;
 					division.cs_division = result.data[divIndex].cs_division;
 					division.division = result.data[divIndex].division;
 					division.cs_brand = result.data[divIndex].cs_brand;
 					division.brand = result.data[divIndex].brand;
 					division.cs_target = result.data[divIndex].cs_target;
 					division.target = result.data[divIndex].target;
 					division.checked = result.data[divIndex].checked;
 					tabDivisions.push(division);
 				}
 				var nbLines = 5;
 				if (result.data.length <= 5) {
 					nbLines = result.data.length; 
 				}
	 			var height = 53 + 21 * nbLines;
	 			var linesStore = new Ext.data.JsonStore({   
	 				fields: ['cs_network', 'reseau', 'cs_division', 'division', 'cs_brand', 'brand', 'cs_target', 'target', 'checked'],
	 				data: result.data
	 		    });  
	 			Ext.create('Ext.grid.Panel', { 
	 				store: linesStore,
	 				columns: [
	 				    {header: '', width: '0%', dataIndex: 'cs_network', hidden:true, hideable:false},
	 				  	{header: '', width: '0%', dataIndex: 'cs_division', hidden:true, hideable:false},
	 				  	{header: '', width: '0%', dataIndex: 'cs_brand', hidden:true, hideable:false},
	 				  	{header: '', width: '0%', dataIndex: 'brand', hidden:true, hideable:false},
	 				  	{header: '', width: '0%', dataIndex: 'cs_target', hidden:true, hideable:false},
	 				  	{header: '', width: '0%', dataIndex: 'target', hidden:true, hideable:false},
	 				    {header:'', width: '10%', xtype:'checkcolumn', dataIndex: 'checked', hideable:false, filterable:false, sortable:false,
		 				     listeners: {
		 			            checkchange: function(column, recordIndex, checked) {
		 			            	tabDivisions[recordIndex].checked = checked;
		 			            }
		 			        }
	 				    },
	 					{header: 'R&eacute;seau', 	width: '29%', dataIndex: 'reseau', 		sortable: true, align: 'left', filterable:true},
	 					{header: 'Division', 		width: '60%', dataIndex: 'division', 	sortable: true, align: 'left', filterable:true}
	 				],
	 				stripeRows: true, 
	 				height:		height, 
	 				renderTo:	'listeDivisions',
	 				title:		'Liste divisions'
	 			});
 			} else {
 				tabDivisions = new Array();
 				$('#listeDivisions').css("display", "none");
 			}
 		}
	});
}

/**
 * Table affichant la liste des indicateurs.
 */
function listeIndicateurs(indicateurs) {
	$('#listeIndicateurs').empty(); 
	tabIndicateurs = new Array();
	for (ind in indicateurs) {
		tabIndicateurs[ind] = indicateurs[ind].checked;
	}
	var linesStore = new Ext.data.JsonStore({   
		fields: ['ind', 'checked', 'libelle'],
		data: indicateurs
    });  
	Ext.create('Ext.grid.Panel', { 
		store: linesStore,
		columns: [
		    {header: '', width: '0%', dataIndex: 'ind', hidden:true, hideable:false},
		    {header:'', width: '10%', xtype:'checkcolumn', dataIndex: 'checked', hideable:false, filterable:false, sortable:false,
			     listeners: {
			    	beforecheckchange: function(column, recordIndex, checked) {
						if (recordIndex == 2) {
							Ext.Msg.alert('Attention', 'Cet indicateur est obligatoire');
							return false;
						} else {
							return true;
						}
			    	},
		            checkchange: function(column, recordIndex, checked) {
		            	tabIndicateurs[recordIndex] = checked;
		            }
		        }
		    },
			{header: 'Indicateur', width: '88%', dataIndex: 'libelle', sortable: true, align: 'left', filterable:true},
		],
		stripeRows: true, 
		height:		158, 
		renderTo:	'listeIndicateurs',
		title:		'Liste des indicateurs'
	});
}

/**********************************/
/************* SELECT *************/
/**********************************/

/**
 * Pour une origine, on recupere les presentations.
 */
function selectOrigine(cs_prod_hier, cs_adm_rgpt) {
	$('#origine' + cs_prod_hier_selected).removeClass('adminBorderSelected').addClass('adminBorder');
	$('#origine' + cs_prod_hier).addClass('adminBorderSelected');
	cs_prod_hier_selected = cs_prod_hier;
	if (cs_prod_hier != 0) {
		$('.compositionClass').show();
		affichageGridPresentations(cs_prod_hier, cs_adm_rgpt); // affichage des presentations de l'origine 
	} else {
		cs_prod_hier_selected = 0;
		$('.compositionClass').hide(); // masque les presentations 
	}
}

/**
 * On recupere les origines.
 */
function selectRgpt(cs_adm_rgpt) {
	$('#rgpt' + cs_adm_rgpt_selected).removeClass('adminBorderSelected').addClass('adminBorder');
	$('#rgpt' + cs_adm_rgpt).addClass('adminBorderSelected');
	cs_adm_rgpt_selected = cs_adm_rgpt;
	$.ajax({
 		traditional: true, 
 		type: 'POST', 
 		url: './parametrageOrigine.do',
 		target: "_blank", 
 		data : {},
 		error: function () {},
 		success: function(result) {
 			var htmlOrigines = "";
 			var firstCsProdHier = 0;
 			var originesAffichees = new Array();
 			// Affichage des origines 
 			if (result.origines != null && result.origines != null) {
 				for (origine in result.origines) {
 					if (marchesOptionsDisplay[result.origines[origine].cs_prod_hier + ""] == undefined
 							|| (marchesOptionsDisplay[result.origines[origine].cs_prod_hier + ""] != undefined 
 									&& (marchesOptionsDisplay[result.origines[origine].cs_prod_hier + ""] == "true" 
 										|| marchesOptionsDisplay[result.origines[origine].cs_prod_hier + ""] == true))) {
	 					if (firstCsProdHier == 0) { // la premiere origine est selectionnee 
	 						firstCsProdHier = result.origines[origine].cs_prod_hier;
	 						htmlOrigines += affichageOrigine(result.origines[origine], cs_adm_rgpt, true);
	 					} else {
	 						htmlOrigines += affichageOrigine(result.origines[origine], cs_adm_rgpt, false);	
	 					}
	 					originesAffichees[result.origines[origine].cs_prod_hier + ""] = "true";
	 					marchesOptionsDisplay[result.origines[origine].cs_prod_hier + ""] = "true";
 					} else {
 						originesAffichees[result.origines[origine].cs_prod_hier + ""] = "false";
 					}
 				}
 			}
 			// Affichage des origines créées
 			for (id in tabOrigines) {
 				if (tabOrigines[id] != "" && originesAffichees[id] != "true") {
					var cs_prod_h = tabOrigines[id].split('#')[1];
					var origine = 	tabOrigines[id].split('#')[2];
					var marche = 	tabOrigines[id].split('#')[3];
					var orig = new Object();
					orig.cs_prod_hier = cs_prod_h; 
					orig.origine = origine;
					orig.marche = marche;
					htmlOrigines += affichageOrigine(orig, cs_adm_rgpt, false);
					marchesOptionsDisplay[id + ""] = "true";
 				}
			}
 			if (htmlOrigines == '') {
 				htmlOrigines = "&nbsp;";
 			}
 			$('#origines').html(htmlOrigines);
 			if (cs_prod_hier_selected != 0) {
 				$('#origine' + firstCsProdHier).removeClass('adminBorderSelected').addClass('adminBorder');
 				selectOrigine(cs_prod_hier_selected, cs_adm_rgpt);
 			} else if (firstCsProdHier != 0) {
 				selectOrigine(firstCsProdHier, cs_adm_rgpt);
 			}
 		}
	});
}


/*************************************/
/************* AFFICHAGE *************/
/*************************************/

/**
 * Creation du HTML pour afficher une origine.
 */
function affichageOrigine(origine, cs_adm_rgpt, selected) {
	var html = "";
	if (selected) {
		html += '<div class="adminBorderSelected origineClass origineClassReadOnly" id="origine' + origine.cs_prod_hier + '">';
	} else {
		html += '<div class="adminBorder origineClass origineClassReadOnly" id="origine' + origine.cs_prod_hier + '">';
	}
	html += '<table style="width:100%;">';
	html += '<tr>';
	html += '<td style="width:20%;">Origine :</td><td>' + origine.origine + '</td>';
	html += "<td align='right'><img class='iconAdmin' onclick='javascript:selectOrigine(" + origine.cs_prod_hier + ',' + cs_adm_rgpt + ");' src='img/loupe.png' style='width:20px;'/></td>";
	html += '</tr>';
	html += '<tr>';
	html += '<td style="width:20%;">March&eacute; :</td><td class="marcheClass">' + origine.marche + '</td>';
	html += "<td align='right'><img class='iconAdmin' onclick='javascript:supprimerOrigine(" + origine.cs_prod_hier + ',' + cs_adm_rgpt + ");' src='img/supprimer.png' style='width:20px;'/></td>";
	html += '</tr>';
	html += '</table>';
	html += '</div>';
	return html;
}

/**
 * Creation du HTML pour afficher un regroupement. 
 */
function affichageRgpt(rgpt, selected) {
	var html = "";
	if (selected) {
		html += '<div class="adminBorderSelected rgptClass" id="rgpt' + rgpt.cs_adm_rgpt + '">';
	} else {
		html += '<div class="adminBorder rgptClass" id="rgpt' + rgpt.cs_adm_rgpt + '">';
	}
	html += "<table style='width:100%;'>";
	html += "<tr>";
	html += "<td>Lib&eacute;ll&eacute; regroupement :</td>"; 
	html += '<td><input type="text" class="x-form-field x-form-text libelleRgpt" style="width:193px;font-size:11px;" value="' + rgpt.libelle_rgpt + '" />' + "</td>";
	html += "<td align='right'><img class='iconAdmin' onclick='javascript:selectRgpt(" + rgpt.cs_adm_rgpt + ");' src='img/loupe.png' style='width:20px;'/></td>";
	html += "</tr>";
	html += "<tr>";
	html += "<td>Type :</td>"; 
	var selectedGSK = "";
	var selectedConcurrent = "";
	if (rgpt.type_rgpt == 'GSK') {
		selectedGSK = "selected";
	} else {
		selectedConcurrent = "selected";
	}
	html += '<td class="statesType">' + '<select class="typeRgpt"><option ' + selectedGSK + ' value="GSK">GSK</option><option ' + selectedConcurrent +' value="CONCURRENT">Concurrent</option></select>' + '</td>';
	html += "<td align='right'><img class='iconAdmin' onclick='javascript:supprimerRgpt(" + rgpt.cs_adm_rgpt + ");' src='img/supprimer.png' style='width:20px;'/></td>";
	html += "</tr>";
	html += "<tr>";
	html += "<td>Couleur :</td>"; 
	html += '<td><input id="couleurRgpt' + rgpt.cs_adm_rgpt + '" type="text" class="couleurRgpt" />' + "</td>";
	html += "</tr>";
	html += "</table>";
	html += "</div>";
	return html;
}

/**
 * Fonction pour comparer deux presentations. 
 */
function comparePresentation(pres1, pres2) {
	if (pres1.presentation < pres2.presentation) {
		return -1;
	} else if (pres1.presentation > pres2.presentation) {
		return 1;
	}
	return 0;
}

/**
 * Remplissage des grid : presentations associees et dispos.
 */
function affichageGridPresentations(cs_prod_hier, cs_adm_rgpt) {
	var auMoinsUnRegroupement = false;
	$('.rgptClass').each(function(index) {
		if ($(this).css('display') != 'none') {
			auMoinsUnRegroupement = true;
		}
	});
	var auMoinsUneOrigine = false;
	$('.origineClass').each(function(index) {
		auMoinsUneOrigine = true;
	});
	if (auMoinsUnRegroupement && auMoinsUneOrigine) {
		// Compositions associees 
		var presentationsAssociees = new Array();
		var nbPresAssociees = 0;
		for (pres in tabPresentations) {
			if (tabPresentations[pres].cs_adm_rgpt == cs_adm_rgpt && tabPresentations[pres].affect && tabPresentations[pres].cs_prod_hier == cs_prod_hier) {
				presentationsAssociees.push(tabPresentations[pres]);
				nbPresAssociees++;
			}
		}
		presentationsAssociees.sort(comparePresentation);
		if (nbPresAssociees >= 5) {
			nbPresAssociees = 5;
		}
		var heightPresAssociees = 53 + 21 * nbPresAssociees;
		$('#compositionsAssociees').empty(); 
		var linesStore = new Ext.data.JsonStore({   
			fields: ['index', 'cs_adm_prstn', 'cs_adm_rgpt', 'origine', 'marche', 'cs_prod_hier', 'cs_presentation', 'affect', 'presentation', 'cip'],
			data: presentationsAssociees
	    });  
		gridAssociees = Ext.create('Ext.grid.Panel', { 
			store: linesStore,
			columns: [
			    {header: '', width: '0%', dataIndex: 'index',			hidden:true, hideable:false},
			    {header: '', width: '0%', dataIndex: 'cs_adm_prstn',	hidden:true, hideable:false},
			    {header: '', width: '0%', dataIndex: 'cs_adm_rgpt',		hidden:true, hideable:false},
			    {header: '', width: '0%', dataIndex: 'origine',			hidden:true, hideable:false},
			    {header: '', width: '0%', dataIndex: 'marche',			hidden:true, hideable:false},
			    {header: '', width: '0%', dataIndex: 'cs_prod_hier',	hidden:true, hideable:false},
			    {header: '', width: '0%', dataIndex: 'cs_presentation', hidden:true, hideable:false},
			    {header: '', width: '0%', dataIndex: 'affect',			hidden:true, hideable:false},
				{header: 'Pr&eacute;sentation', tdCls:'addCursorClass',	width: '77%', dataIndex: 'presentation', sortable: true, align: 'left', filterable:true},
				{header: 'Code CIP', width: '22%', tdCls:'addCursorClass', dataIndex: 'cip', sortable: true, align: 'left', filterable:true}
			],
			stripeRows: true, 
			height: heightPresAssociees, 
			renderTo: 'compositionsAssociees',
			title:'Pr&eacute;sentations associ&eacute;es',
			multiSelect:true,
			listeners : {
				cellclick : function(grid, rowIndex, cellIndex, e) { 
					cs_prod_hier_compo = cs_prod_hier;
					cs_adm_rgpt_compo = cs_adm_rgpt;
				},
				celldblclick : function(grid, rowIndex, cellIndex, e) {  
					tabPresentations[e.data.index].affect = false;
					tabPresentations[e.data.index].cs_adm_rgpt = 0;
					affichageGridPresentations(cs_prod_hier, cs_adm_rgpt);
				} 
			}
		});
		// Compositions disponibles mais pas associees 
		var presentationsDispos = new Array();
		var nbPresDispo = 0;
		for (pres in tabPresentations) {
			if (tabPresentations[pres].cs_prod_hier == cs_prod_hier && !tabPresentations[pres].affect) {
				presentationsDispos.push(tabPresentations[pres]);
				nbPresDispo++;
			}
		}
		presentationsDispos.sort(comparePresentation);
		if (nbPresDispo >= 5) {
			nbPresDispo = 5;
		}
		var heightPresDispo = 53 + 21 * nbPresDispo;
		$('#compositionsDispos').empty(); 
		var linesStore = new Ext.data.JsonStore({   
	      fields: ['index', 'cs_adm_prstn', 'cs_adm_rgpt', 'origine', 'marche', 'cs_prod_hier', 'cs_presentation', 'affect', 'presentation', 'cip'],
	      data: presentationsDispos
	    });  
		gridDispos = Ext.create('Ext.grid.Panel', { 
			store: linesStore,
			columns: [
			    {header: '',  width: '0%', dataIndex: 'index', 				hidden:true, hideable:false},
			    {header: '',  width: '0%', dataIndex: 'cs_adm_prstn', 		hidden:true, hideable:false},
			    {header: '',  width: '0%', dataIndex: 'cs_adm_rgpt', 		hidden:true, hideable:false},
			    {header: '',  width: '0%', dataIndex: 'origine',			hidden:true, hideable:false},
			    {header: '',  width: '0%', dataIndex: 'marche',				hidden:true, hideable:false},
			    {header: '',  width: '0%', dataIndex: 'cs_prod_hier',		hidden:true, hideable:false},
			    {header: '',  width: '0%', dataIndex: 'cs_presentation',	hidden:true, hideable:false},
			    {header: '',  width: '0%', dataIndex: 'affect',				hidden:true, hideable:false},
				{header: 'Pr&eacute;sentation',	tdCls:'addCursorClass', width: '77%', dataIndex: 'presentation', sortable: true, align: 'left', filterable:true},
				{header: 'Code CIP', width: '22%', tdCls:'addCursorClass', dataIndex: 'cip', sortable: true, align: 'left', filterable:true}
			],
			stripeRows: true, 
			height: heightPresDispo, 
			renderTo: 'compositionsDispos',
			title:'Pr&eacute;sentations disponibles',
			multiSelect:true,
			listeners : {
				cellclick : function(grid, rowIndex, cellIndex, e) { 
					cs_prod_hier_compo = cs_prod_hier;
					cs_adm_rgpt_compo = cs_adm_rgpt;
				},
				celldblclick : function(grid, rowIndex, cellIndex, e) { 
					tabPresentations[e.data.index].affect = true;
					tabPresentations[e.data.index].cs_adm_rgpt = cs_adm_rgpt;
					affichageGridPresentations(cs_prod_hier, cs_adm_rgpt);
				}
			}
		});
		$('.compositionClassIcon').css("display", "inline");
	} else {
		$('#compositionsAssociees').empty(); 
		$('#compositionsDispos').empty();
		$('.compositionClassIcon').css("display", "none");
	}
}

/**
 * Transfert des presentations disponibles vers des presentations associees.
 */
function transfertVersAssociees() {
	var presSelected = gridDispos.getSelectionModel().getSelection();
	if (presSelected == undefined || (presSelected != undefined && presSelected.length == 0)) {
		Ext.Msg.alert('Attention', 'Veuillez s&eacute;lectionner une ou plusieurs pr&eacute;sentations disponibles');
	}
	for (pres in presSelected) {
		tabPresentations[presSelected[pres].data.index].affect = true;
		tabPresentations[presSelected[pres].data.index].cs_adm_rgpt = cs_adm_rgpt_compo;
		
	}
	if (cs_prod_hier_compo != 0 && cs_adm_rgpt_compo != 0) {
		affichageGridPresentations(cs_prod_hier_compo, cs_adm_rgpt_compo);
	}
}

/**
 * Transfert des presentations associees vers des presentations disponibles.
 */
function transfertVersDispos() {
	var presSelected = gridAssociees.getSelectionModel().getSelection();
	if (presSelected == undefined || (presSelected != undefined && presSelected.length == 0)) {
		Ext.Msg.alert('Attention', 'Veuillez s&eacute;lectionner une ou plusieurs pr&eacute;sentations associ&eacute;es');
	}
	for (pres in presSelected) {
		tabPresentations[presSelected[pres].data.index].affect = false;
		tabPresentations[presSelected[pres].data.index].cs_adm_rgpt = 0;
		
	}
	if (cs_prod_hier_compo != 0 && cs_adm_rgpt_compo != 0) {
		affichageGridPresentations(cs_prod_hier_compo, cs_adm_rgpt_compo);
	}
}


/***************************************/
/************* SUPPRESSION *************/
/***************************************/

/**
 * Supprime un regroupement.
 * @param cs_adm_rgpt : id regroupement
 */
function supprimerRgpt(cs_adm_rgpt) {
	var conf = Ext.Msg;
	conf.buttonText = {yes:"Oui", no:"Non"};
	conf.confirm("Confirmation", "Voulez-vous vraiment supprimer ce regroupement ?", function(answer) {
		if (answer === "yes") {
			// do stuff
			$('#rgpt' + cs_adm_rgpt).css("display", "none");
			//$('#rgpt' + cs_adm_rgpt).remove();
			$('.origineClass').hide();
			$('.compositionClass').hide();
			// MAJ de la structure des presentations 
			for (pres in tabPresentations) {
				if (tabPresentations[pres].cs_adm_rgpt == cs_adm_rgpt) {
					tabPresentations[pres].affect = false;
				}
			}
			// Selectionne le premier regroupement 
			if ($('#regroupements > div') != undefined && $('#regroupements > div').get(0) != undefined) {
				var idRgpt = $('#regroupements > div').get(0).id.split('rgpt')[1];
				$('#rgpt' + idRgpt).addClass('adminBorderSelected');
				selectRgpt(idRgpt);
			} else {
				$('#regroupements > div').removeClass('adminBorderSelected').addClass('adminBorder');
			}
			// Si il n'y a plus de regroupement 
			var auMoinsUnRegroupement = false;
			$('.rgptClass').each(function(index) {
				if ($(this).css('display') != 'none') {
					auMoinsUnRegroupement = true;
				}
			});
			if (!auMoinsUnRegroupement) {
				tabOrigines = new Array();
				cs_prod_hier_selected = 0;
				cs_adm_rgpt_selected = 0;
				for (pres in tabPresentations) {
					tabPresentations[pres].affect = false;
				}
				$('.origineClass').each(function(index) {
					var cs_prod_hier_tmp = $(this).get(0).id.split('origine')[1];
					marchesOptionsDisplay[cs_prod_hier_tmp + ""] = "false";
					$(this).remove();
				});
			}
		} else {
			// do nothing 
			return;
		}
	}, this);
}

/**
 * Supprime une origine.
 * @param cs_prod_hier : id origine
 */
function supprimerOrigine(cs_prod_hier, cs_adm_rgpt) {
	var conf = Ext.Msg;
	conf.buttonText = {yes:"Oui", no:"Non"};
	conf.confirm("Confirmation", "Voulez-vous vraiment supprimer cette origine ?", function(answer) {
		if (answer === "yes") {
			// do stuff
			$('#origine' + cs_prod_hier).remove();
			tabOrigines[cs_prod_hier] = "";
			$('.compositionClass').hide();
			marchesOptionsDisplay[cs_prod_hier + ""] = "false";
			listeMarches(firstCodeOrigineOptions, "");
			// MAJ de la structure des presentations 
			for (pres in tabPresentations) {
				if (tabPresentations[pres].cs_prod_hier == cs_prod_hier) {
					tabPresentations[pres].affect = false;
				}
			}
			// Selectionne la premiere origine 
			if ($('#origines > div') != undefined && $('#origines > div').get(0) != undefined) {
				var idOrigine = $('#origines > div').get(0).id.split('origine')[1];
				$('#origine' + idOrigine).addClass('adminBorderSelected');
				selectOrigine(idOrigine, cs_adm_rgpt);
			} else {
				$('#origines > div').removeClass('adminBorderSelected').addClass('adminBorder');
			}
		} else {
			// do nothing 
			return;
		}
	}, this);
}


/************************************/
/************* CREATION *************/
/************************************/

/**
 * Ajout d'un regroupement.
 */
function ajouterRegroupement() {
	var aValider = $('.iconAdminValide');
	if (aValider.length != 0) {
		Ext.Msg.alert('Attention', 'Veuillez valider l\'origine');
	} else {
		$('#rgpt' + cs_adm_rgpt_selected).removeClass('adminBorderSelected').addClass('adminBorder');
		cs_adm_rgpt_selected = idRgptTmp;
		var html = $('#regroupements').html();
		var rgptTmp = new Object();
		rgptTmp.code_couleur_rgpt = "#FF0000";
		rgptTmp.cs_adm_rgpt = idRgptTmp;
		rgptTmp.libelle_rgpt = 'Compl&eacute;ter...';
		rgptTmp.type_rgpt = "GSK";
		idRgptTmp++;
		$('.accueilBorder').removeClass('adminBorderSelected');
		$('#regroupements').append(affichageRgpt(rgptTmp, true));
		$('#couleurRgpt' + rgptTmp.cs_adm_rgpt).spectrum({
			color: rgptTmp.code_couleur_rgpt
		});
		// On selectionne l'origine deja selectionnee avec le regroupement que l'on créé 
		if (cs_prod_hier_selected != 0) {
			selectOrigine(cs_prod_hier_selected, cs_adm_rgpt_selected);
		}
	}
}

/**
 * Ajout d'une origine.
 */
function ajouterOrigine() {
	var auMoinsUnRegroupement = false;
	$('.rgptClass').each(function(index) {
		if ($(this).css('display') != 'none') {
			auMoinsUnRegroupement = true;
		}
	});
	if (!auMoinsUnRegroupement) {
		Ext.Msg.alert('Attention', 'Veuillez ajouter un regroupement');
	} else {
		var aValider = $('.iconAdminValide');
		if (aValider.length != 0) {
			Ext.Msg.alert('Attention', 'Veuillez valider l\'origine');
		} else {
			// On reinitialise d'abord la liste des marches disponibles 
			$.ajax({
		 		traditional: true, 
		 		type: 'POST', 
		 		url: './listeMarches.do',
		 		target: "_blank", 
		 		data : {
		 			lib_orig: firstCodeOrigineOptions
		 		},
		 		error: function () {},
		 		success: function(result) {
		 			// Reinitialise la liste des marches 
		 			marcheOptions = "";
		 			for (m in result.marches) {
		 				var disp = marchesOptionsDisplay[result.marches[m].code] + "";
		 				if (disp == "undefined" || disp == "false") { // Filtre sur les marches 
		 					marcheOptions += '<option value="' + result.marches[m].code +'">' + result.marches[m].libelle + '</option>';
		 				}
		 			}
		 			$('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).html(marcheOptions);
					// Creation du html avec un id=csProdHierTmp faux 
					var html = "";
					html += '<div class="adminBorderSelected origineClass" id="origine' + csProdHierTmp + '">';
					html += '<table style="width:100%;">';
					html += '<tr>';
					html += '<td style="width:20%;">Origine :</td><td class="statesType">';
					html += '<select onchange="changeOrigine(' + cs_adm_rgpt_selected + ',' + csProdHierTmp + ');" class="origineClass2" id="origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp + '">' + origineOptions + '</select>';
					html += '</td>';
					html += "<td align='right'><img class='iconAdmin' onclick='javascript:selectOrigine(" + csProdHierTmp + ',' + cs_adm_rgpt_selected + ");' src='img/loupe.png' style='width:20px;'/></td>";
					html += '</tr>';
					html += '<tr>';
					html += '<td style="width:20%;">March&eacute; :</td><td class="statesType">';
					html += '<select onchange="changeMarche(' + cs_adm_rgpt_selected + ',' + csProdHierTmp + ');" class="marcheClass" id="marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp + '">' + marcheOptions + '</select>';
					html += '</td>';
					html += "<td align='right'><img class='iconAdmin iconAdminValide' onclick='javascript:validerOrigine(" + csProdHierTmp + ',' + cs_adm_rgpt_selected + ");' src='img/valider.png' style='width:20px;'/><img class='iconAdmin' onclick='javascript:supprimerOrigine(" + csProdHierTmp + ',' + cs_adm_rgpt_selected + ");' src='img/supprimer.png' style='width:20px;'/></td>";
					html += '</tr>';
					html += '</table>';
					html += '</div>';
					$('#origines').append(html + "&nbsp;");
					// Recuperation des variables de listes selectionnees par defaut
					var orig = $('#origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).val();
					var cs_prod_hier = $('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).val();
					// Changement de l'id pour la zone origine (avec le cs_prod_hier recuperee de la liste deroulante) 
					$('#origine' + csProdHierTmp).get(0).id = 'origine' + cs_prod_hier;
					marchesOptionsDisplay[cs_prod_hier + ""] = "true";
					// Nouveau html avec le bon id 
					html = "";
					html += '<table style="width:100%;">';
					html += '<tr>';
					html += '<td style="width:20%;">Origine :</td><td class="statesType">';
					html += '<select onchange="changeOrigine(' + cs_adm_rgpt_selected + ',' + cs_prod_hier + ');" class="origineClass2" id="origine-' + cs_adm_rgpt_selected + '-' + cs_prod_hier + '">' + origineOptions + '</select>';
					html += '</td>';
					html += "<td align='right'><img class='iconAdmin' onclick='javascript:selectOrigine(" + cs_prod_hier + ',' + cs_adm_rgpt_selected + ");' src='img/loupe.png' style='width:20px;'/></td>";
					html += '</tr>';
					html += '<tr>';
					html += '<td style="width:20%;">March&eacute; :</td><td class="statesType">';
					html += '<select onchange="changeMarche(' + cs_adm_rgpt_selected + ',' + cs_prod_hier + ');" class="marcheClass" id="marche-' + cs_adm_rgpt_selected + '-' + cs_prod_hier + '">' + marcheOptions + '</select>';
					html += '</td>';
					html += "<td align='right'><img class='iconAdmin iconAdminValide' onclick='javascript:validerOrigine(" + cs_prod_hier + ',' + cs_adm_rgpt_selected + ");' src='img/valider.png' style='width:20px;'/><img class='iconAdmin' onclick='javascript:supprimerOrigine(" + cs_prod_hier + ',' + cs_adm_rgpt_selected + ");' src='img/supprimer.png' style='width:20px;'/></td>";
					html += '</tr>';
					html += '</table>';
					$('#origine' + cs_prod_hier).html(html);
					// MAJ de la structure des origines 
					var lib_orig = $('#origine-' + cs_adm_rgpt_selected + '-' + cs_prod_hier).get(0).options[$('#origine-' + cs_adm_rgpt_selected + '-' + cs_prod_hier).get(0).selectedIndex].text;
					var lib_marche = $('#marche-' + cs_adm_rgpt_selected + '-' + cs_prod_hier).get(0).options[$('#marche-' + cs_adm_rgpt_selected + '-' + cs_prod_hier).get(0).selectedIndex].text;
					tabOrigines[parseInt(cs_prod_hier)] = orig + "#" + cs_prod_hier + "#" + lib_orig + "#" + lib_marche + "#false"; 
					// Faux id pour les origines créées 
					csProdHierTmp++;
					// On selectionnne l'origine que l'on créé 
					selectOrigine(cs_prod_hier, cs_adm_rgpt_selected);
		 		}
		 	}); 
		}
	}
}

/**
 * Validation de l'ajout d'une origine.
 */
function validerOrigine(origTmp, cs_adm_rgpt) {
	var orig = $('#origine-' + cs_adm_rgpt + '-' + origTmp).val();
	var cs_prod_hier = $('#marche-' + cs_adm_rgpt + '-' + origTmp).val();
	// Ajout de lignes dans la structure : tabPresentations 
	$.ajax({
 		traditional: true, 
 		type: 'POST', 
 		url: './listePresentationsMarche.do',
 		target: "_blank", 
 		data : {
 			lib_orig: orig,
 			cs_prod_hier: cs_prod_hier
 		},
 		error: function () {},
 		success: function(result) {
 			// Variables
 			var lib_orig = $('#origine-' + cs_adm_rgpt + '-' + origTmp).get(0).options[$('#origine-' + cs_adm_rgpt + '-' + origTmp).get(0).selectedIndex].text;
 			var lib_marche = $('#marche-' + cs_adm_rgpt + '-' + origTmp).get(0).options[$('#marche-' + cs_adm_rgpt + '-' + origTmp).get(0).selectedIndex].text;
 			// Resultats 
 			var presentations = result.presentations;
 			if (presentations != undefined && presentations != null) {
 				var origineAlreadyExist = false;
 				for (pres in tabPresentations) {
 					if (cs_prod_hier == tabPresentations[pres].cs_prod_hier) {
 						origineAlreadyExist = true;
 						break;
 					}
 				}
 				// On ajoute à la structure uniquement si cette origine n'a pas déjà été ajoutée 
 				if (!origineAlreadyExist) {
	 				for (pres in presentations) {
	 					var presentation = new Object();
	 					presentation.index = indexTabPresentations; 
	 					presentation.cs_adm_prstn = presentations[pres].cs_adm_prstn;
	 					presentation.cs_adm_rgpt = presentations[pres].cs_adm_rgpt;
	 					presentation.origine = $('#origine-' + cs_adm_rgpt + '-' + origTmp).val();
	 					presentation.marche = presentations[pres].marche;
	 					presentation.cs_prod_hier = $('#marche-' + cs_adm_rgpt + '-' + origTmp).val();
	 					presentation.cs_presentation = presentations[pres].cs_presentation;
	 					presentation.presentation = presentations[pres].presentation;
	 					presentation.cip = presentations[pres].cip;
	 					presentation.affect = presentations[pres].affect; 
	 					tabPresentations.push(presentation);
	 					indexTabPresentations++;
	 				}
 				}
 			}
 			// MAJ de la structure des marches selectionnes 
 			marchesOptionsDisplay[cs_prod_hier + ""] = "true";
 			// MAJ des origines
 			tabOrigines[cs_prod_hier] = tabOrigines[origTmp];
 			tabOrigines[origTmp] = "";
 			// Passe en mode lecture pour l'origine 
 			// Change l'id avec le cs_prod_hier sélectionné
 			$('#origine' + origTmp).get(0).id = 'origine' + cs_prod_hier;
 			var html = "";
 			html += '<table style="width:100%;">';
 			html += '<tr>';
 			html += '<td style="width:20%;">Origine :</td><td>';
 			html += lib_orig;
 			html += '</td>';
 			html += "<td align='right'><img class='iconAdmin' onclick='javascript:selectOrigine(" + cs_prod_hier + ',' + cs_adm_rgpt_selected + ");' src='img/loupe.png' style='width:20px;'/></td>";
 			html += '</tr>';
 			html += '<tr>';
 			html += '<td style="width:20%;">March&eacute; :</td><td class="statesType">';
 			html += lib_marche;
 			html += '</td>';
 			html += "<td align='right'><img class='iconAdmin' onclick='javascript:supprimerOrigine(" + cs_prod_hier + ',' + cs_adm_rgpt_selected + ");' src='img/supprimer.png' style='width:20px;'/></td>";
 			html += '</tr>';
 			html += '</table>';
 			$('#origine' + cs_prod_hier).html(html);
 			// Selectionne l'origine créée 
 			selectOrigine(cs_prod_hier, cs_adm_rgpt);
 		}
	});
}


/***************************************/
/************* MAJ ORIGINE *************/
/***************************************/

/**
 * Lors de la modification d'une origine, on met à jour le tableau JS.
 */
function changeOrigine(cs_adm_rgpt_selected, csProdHierTmp) {
	listeMarches($('#origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).val(), csProdHierTmp);
	tabOrigines[parseInt(csProdHierTmp)] =  $('#origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).val() + "#" + $('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).val() + "#" + $('#origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).get(0).options[$('#origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).get(0).selectedIndex].text + "#" + $('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).get(0).options[$('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).get(0).selectedIndex].text + "#false";
}

/**
 * Lors de la modification du marche, on met à jour le tableau JS.
 */
function changeMarche(cs_adm_rgpt_selected, csProdHierTmp) {
	tabOrigines[parseInt(csProdHierTmp)] = $('#origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).val() + "#" + $('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).val() + "#" + $('#origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).get(0).options[$('#origine-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).get(0).selectedIndex].text + "#" + $('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).get(0).options[$('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).get(0).selectedIndex].text + "#false";
}


/***********************************/
/************* MARCHES *************/
/***********************************/
function listeMarches(lib_orig, csProdHierTmp) {
	$.ajax({
 		traditional: true, 
 		type: 'POST', 
 		url: './listeMarches.do',
 		target: "_blank", 
 		data : {
 			lib_orig: lib_orig
 		},
 		error: function () {},
 		success: function(result) {
 			marcheOptions = "";
 			var premierChoix = 0;
 			for (m in result.marches) {
 				var disp = marchesOptionsDisplay[result.marches[m].code] + "";
 				if (disp == "undefined" || disp == "false") { // Filtre sur les marches 
 					marcheOptions += '<option value="' + result.marches[m].code +'">' + result.marches[m].libelle + '</option>';
 					if (premierChoix == 0) {
 						premierChoix = result.marches[m].code;
 					}
 				}
 			}
 			$('#marche-' + cs_adm_rgpt_selected + '-' + csProdHierTmp).html(marcheOptions);
 		}
 	});
}


/*************************************************/
/************* CHARGEMENT DE LA PAGE *************/
/*************************************************/
Ext.onReady(function() {
	
	/**
	 * Suppression d'un produit.
	 */
	function deleteProduct() {
		var conf = Ext.Msg;
		conf.buttonText = {yes:"Oui", no:"Non"};
		conf.confirm("Confirmation", "Voulez-vous vraiment supprimer ce produit ?", function(answer) {
			if (answer === "yes") {
				maskSuppression.show();
				if (cs_adm_pdt_selected == 0 || cs_adm_pdt_selected == '0') {
					window.open("./welcome.do", "_self");
	 				maskSuppression.hide();
				} else {
					// Requete de sauvegarde 
					$.ajax({
				 		traditional: true, 
				 		type: 'POST', 
				 		url: './deleteProduit.do',
				 		target: "_blank", 
				 		data : {},
				 		error: function () {},
				 		success: function(result) {
				 			if (result.success == 'success') {
				 				window.open("./welcome.do", "_self");
				 				maskSuppression.hide();
				 			} else {
				 				maskSuppression.hide();
				 				window.open("./error.do", "_self");
				 			}
				 		}
					});
				}
			} else {
				// do nothing 
				return;
			}
		}, this);
	}
	
	/**
	 * Sauvegarde un produit.
	 */
	function saveProduct() {
		var aValider = $('.iconAdminValide');
		if (aValider.length != 0) {
			Ext.Msg.alert('Attention', 'Veuillez valider l\'origine');
		} else {
			// PRODUIT
			var libelleMarche = $('#libelleMarche').val();
			var libelleProduit = $('#libelleProduit').val();
			var csSrc = $('#csSrcId').val();
			var codeData = $('#codeDataId').val();
			var libData = $('#codeDataId').get(0).options[$('#codeDataId').get(0).selectedIndex].text;
			var csProduct = $('#sampilotId').val();
			// REGROUPEMENT 
			var regroupements = "";
			var rgptLibObligatoire = true;
			$('.rgptClass').each(function(index) { // Pour chaque regroupement 
				regroupements += $(this).get(0).id.split('rgpt')[1] + "#"; 
				regroupements += $(this).find('.libelleRgpt').get(0).value + "#";
				regroupements += $(this).find('.typeRgpt').get(0).value + "#";
				regroupements += $(this).find('.couleurRgpt').spectrum("get").toHex() + "#";
				regroupements += ($(this).css('display') == 'none');
				regroupements += ";";
				if ($(this).find('.libelleRgpt').get(0).value == '') {
					rgptLibObligatoire = false;
				}
			});
			// PRESENTATIONS 
			var presentations = "";
			for (pres in tabPresentations) {
				presentations += tabPresentations[pres].cs_adm_prstn + ":";
				presentations += tabPresentations[pres].cs_adm_rgpt + ":";
				presentations += tabPresentations[pres].origine + ":";
				presentations += tabPresentations[pres].marche + ":";
				presentations += tabPresentations[pres].cs_prod_hier + ":";
				presentations += tabPresentations[pres].cs_presentation + ":";
				presentations += tabPresentations[pres].presentation + ":";
				presentations += tabPresentations[pres].cip + ":";
				presentations += tabPresentations[pres].affect + "!";
			}
			// Champs obligatoires 
			var auMoinsUneDivision = false;
			for (div in tabDivisions) {
				if (tabDivisions[div].checked) {
					auMoinsUneDivision = true;
					break;
				}
			}
			if (!auMoinsUneDivision) {
				Ext.Msg.alert('Attention', 'Veuillez s&eacute;lectionner au moins une division');
			}
			var auMoinsUneOrigine = false;
			$('.origineClass').each(function(index) {
				auMoinsUneOrigine = true;
			});
			if (!auMoinsUneOrigine) {
				Ext.Msg.alert('Attention', 'Veuillez ajouter au moins une origine');
			}
			var auMoinsUnRegroupement = false;
			$('.rgptClass').each(function(index) {
				if ($(this).css('display') != 'none') {
					if ($(this).find('.typeRgpt').get(0).value == 'GSK') {
						auMoinsUnRegroupement = true;
					}
				}
			});
			if (!auMoinsUnRegroupement) {
				Ext.Msg.alert('Attention', 'Veuillez ajouter au moins un regroupement de type GSK');
			}
			$('.mandatoryClass').remove();
			if (parseInt(csProduct) == 0) {
				Ext.Msg.alert('Attention', 'Veuillez choisir un produit GSK');
			}
			if (parseInt(csSrc) == -1) {
				Ext.Msg.alert('Attention', 'Veuillez choisir un code src');
			}
			if (libelleProduit == '') {
				Ext.Msg.alert('Attention', 'Veuillez saisir un libell&eacute; pour le produit');
			}
			if (libelleMarche == '') {
				Ext.Msg.alert('Attention', 'Veuillez saisir un libell&eacute; pour le march&eacute;');
			}
			if (!rgptLibObligatoire) {
				Ext.Msg.alert('Attention', 'Veuillez saisir un libell&eacute; pour le regroupement');
			}
			var auMoinsUnePresentationAssociee = true;
			$('.rgptClass').each(function(index) {
				if ($(this).css('display') != 'none') {
					var cs_adm_rgpt_tmp = $(this).get(0).id.split('rgpt')[1];
					$('.origineClass').each(function(index) {
						if (auMoinsUnePresentationAssociee) {
							var cs_prod_hier_tmp = $(this).get(0).id.split('origine')[1];
							var findPresentation = false;
							for (pres in tabPresentations) {
								if (tabPresentations[pres].cs_adm_rgpt == parseInt(cs_adm_rgpt_tmp) && tabPresentations[pres].affect && tabPresentations[pres].cs_prod_hier == cs_prod_hier_tmp) {
									findPresentation = true;
									break;
								}
							}
							if (!findPresentation) {
								auMoinsUnePresentationAssociee = false;
								var rgptLib = $('#rgpt' + cs_adm_rgpt_tmp).find('table tbody tr td input').get(0).value;
								var origineLib = $(this).find('table tr td').get(1).textContent;
								Ext.Msg.alert('Attention', 'Veuillez ajouter une pr&eacute;sentation pour le regroupement ' + rgptLib + ' et l\'origine ' + origineLib);
							}
						}
					});
				}
			});
			var configIndicateurOk = (tabIndicateurs[0] && tabIndicateurs[1] && tabIndicateurs[2] && tabIndicateurs[3] && tabIndicateurs[4]) // complet
									|| (!tabIndicateurs[0] && !tabIndicateurs[1] && tabIndicateurs[2] && tabIndicateurs[3] && tabIndicateurs[4]) // pas de marche
									|| (tabIndicateurs[0] && !tabIndicateurs[1] && tabIndicateurs[2] && !tabIndicateurs[3] && !tabIndicateurs[4]) // lancement
									|| (!tabIndicateurs[0] && !tabIndicateurs[1] && tabIndicateurs[2] && !tabIndicateurs[3] && !tabIndicateurs[4]); // incomplet
			if (!configIndicateurOk) {
				var msgAlert = 'Les configurations possibles sont :<ul>';
				msgAlert += '<li>Complet : PM | &Delta;PM | VOL | &Delta;VOL | EVOL_VOL</li>';
				msgAlert += '<li>Pas de march&eacute; : VOL | &Delta;VOL | EVOL_VOL</li>';
				msgAlert += '<li>Lancement : PM | VOL</li>';
				msgAlert += '<li>Incomplet : VOL</li>';
				msgAlert += '</ul>';
				Ext.Msg.alert('Configuration des indicateurs impossible', msgAlert);
			}
			// DIVISIONS  
			var divisions = "";
			for (div in tabDivisions) {
				divisions += tabDivisions[div].cs_network + ":";
				divisions += tabDivisions[div].reseau + ":";
				divisions += tabDivisions[div].cs_division + ":";
				divisions += tabDivisions[div].division + ":";
				divisions += tabDivisions[div].cs_brand + ":";
				divisions += tabDivisions[div].brand + ":";
				divisions += tabDivisions[div].cs_target + ":";
				divisions += tabDivisions[div].target + ":";
				divisions += tabDivisions[div].checked + "!";
			}
			// INDICATEURS
			var indicateurs = "";
			for (ind in tabIndicateurs) {
				indicateurs += tabIndicateurs[ind] + ":";
			}
			if (libelleMarche != '' && libelleProduit != '' && rgptLibObligatoire && parseInt(csProduct) != 0 
					&& auMoinsUnRegroupement && auMoinsUneOrigine && auMoinsUnePresentationAssociee && auMoinsUneDivision
					&& configIndicateurOk) {
				maskSauvegarde.show();
				// Requete de sauvegarde 
				$.ajax({
			 		traditional: true, 
			 		type: 'POST', 
			 		url: './saveProduit.do',
			 		target: "_blank", 
			 		data : {
			 			libelleMarche:	libelleMarche,
			 			libelleProduit:	libelleProduit,
			 			csSrc:			csSrc,
			 			csProduct:		csProduct,
			 			codeData:		codeData,
			 			libData:		libData, 
			 			regroupements:	regroupements,
			 			presentations:	presentations,
						divisions:		divisions,
						indicateurs:	indicateurs
			 		},
			 		error: function () {},
			 		success: function(result) {
			 			// Relance le parametrage 
			 			if (result.success == 'success') {
			 				parametrage();
			 				maskSauvegarde.hide();
			 			} else {
			 				maskSauvegarde.hide();
			 				window.open("./error.do", "_self");
			 			}
			 		}
				});
			}
		}
	}
	
	/**
	 * Rendu de la page.
	 */
	Ext.create('Ext.container.Viewport', {
		layout: 'border',
		items: [
	        {
	        	region: 'center',
	        	title: '<span style="font-size:18px;">Administration</span>',
	        	autoScroll: true,
				bodyStyle: 'background-color: #F5F5F5;',
	        	id: 'centerAdminId',
	        	html: [
	        	       '<div class="accueilBorder">',
		        	       '<table class="text-general" style="width:100%;">',
		        	       
			        	       '<tr>',
			   	       				'<td colspan="2" align="center" style="width:100%;">',
			   	       					'<div style="float:left;width:33%;" id="save"></div>',
			   	       					'<div style="float:left;width:33%;" id="delete"></div>',
			   	       					'<div style="float:left;width:33%;" id="back"></div>',
			   	       				'</td>',
			   	       			'</tr>', 
			   	       			
			        	       '<tr>',
				   	       			'<td class="text-general adminTitle" colspan="2">&bull; Administration : produit</td>',
				   	       		'</tr>',
				   	       		
				   	       		'<tr>',
				   	       			'<td class="text-general adminProduit" colspan="2">',
				   	       			
					   	       			'<div style="width:100%;float:left;padding-bottom:7px;">',
					   	       			
					   	       				'<div style="float:left;width:33%;">',
					   	       					'<span class="adminLibClass">Libell&eacute; march&eacute; :&nbsp;</span>',
					   	       					'<input id="libelleMarche" type="text" class="x-form-field x-form-text adminInputStyle" style="width:193px;font-size:11px;" />',
					   	       				'</div>',
					   	       				
						   	       			'<div style="float:left;width:33%;">',
						   	       				'<span class="adminLibClass">Libell&eacute; produit :&nbsp;</span>',
						   	       				'<input id="libelleProduit" type="text" class="x-form-field x-form-text adminInputStyle" style="width:193px;font-size:11px;" />',
					   	       				'</div>',
					   	       				
						   	       			'<div style="float:left;width:34%;" class="statesType">',
												'<span class="adminLibClass">Produit GSK :&nbsp;</span>',
							   	       			'<select id="sampilotId">',
												'</select>',
					   	       				'</div>',
					   	       				
					   	       			'</div>',
					   	       			
					   	       			'<div style="width:100%;float:left;">',
					   	       			
						   	       			'<div style="float:left;width:33%;" class="statesType">',
								   	       		'<span class="adminLibClass">Code src :&nbsp;</span>',
							   	       			'<select id="csSrcId">',
												'</select>',
											'</div>',
											
											'<div style="float:left;width:33%;" class="statesType">',
						   	       				'<span class="adminLibClass">Unit&eacute; :&nbsp;</span>',
							   	       			'<select id="codeDataId">',
													'<option value="UN">Unit&eacute;</option>',
													'<option value="CA">Chiffre d\'affaire</option>',
													'<option value="JT">Unit&eacute; &eacute;quivalente</option>',
												'</select>',
					   	       				'</div>',
					   	       				
					   	       				//'<div id="listeDivisions" style="float:left;width:33%;"></div>',
											
										'</div>',
										
										'<div style="width:100%;float:left;">',
										
											'<div id="listeDivisions" style="width:33%;padding-top:10px;float:left;"></div>',
											
											'<div style="width:33%;padding-top:10px;float:left;"></div>',
											
											'<div id="listeIndicateurs" style="width:33%;padding-top:10px;float:left;"></div>',
										
										'</div>',
									
				   	       			'</td>',
				   	       		'</tr>',
				   	       		
		        	       		'<tr>',
		        	       			'<td class="text-general adminTitle" colspan="2">&bull; Administration : regroupement</td>',
		        	       		'</tr>',
		        	       		
		        	       		'<tr>',
				   	       			'<td colspan="2" class="text-general">',
				   	       				'<div id="rgptObligatoire" style="float:left;width:33%;margin-right:5px;padding-bottom:5px;">',
						   	       			'<div 					style="float:left;padding-top:3px;padding-right:5px;text-decoration:underline;">Regroupements</div>',
						   	       			'<div id="ajoutRgpt" 	style="float:left;"></div>',
						   	       		'</div>',
						   	       		
						   	       		'<div style="float:left;width:33%;margin-right:5px;padding-bottom:5px;">',
				   	       					'<div 					style="float:left;padding-top:3px;padding-right:5px;text-decoration:underline;">Origines</div>',
				   	       					'<div id="ajoutOrigine"	style="float:left;"></div>',
				   	       				'</div>',
				   	       				
				   	       				'<div style="float:left;width:33%;text-decoration:underline;padding-top:3px;">Compositions</div>',
				   	       				
				   	       				'<div id="regroupements"	style="float:left;width:33%;margin-right:5px;"></div>',
				   	       				
				   	       				'<div id="origines"			style="float:left;width:33%;margin-right:5px;"></div>',
				   	       				
				   	       				'<div id="compositions"		style="float:left;width:33%;">',
				   	       					'<div id="compositionsAssociees"	class="compositionClass" ></div>',
				   	       					'<div align="center">',
				   	       						'<img class="iconAdmin compositionClass compositionClassIcon" src="img/plus.png" style="width:20px;display:none;" onclick="javascript:transfertVersAssociees();" />',
				   	       						'<img class="iconAdmin compositionClass compositionClassIcon" src="img/supprimer.png" style="width:20px;display:none;" onclick="javascript:transfertVersDispos();" />',
				   	       					'</div>',
				   	       					'<div id="compositionsDispos"		class="compositionClass"></div>',
				   	       				'</div>',
				   	       			'</td>',
				   	       		'</tr>', 
				   	       		
		        	       	'</table>',
			   	       	'</div>'
	        	]
	        }
		]
	});
	
	// Bouton pour ajouter un regroupement   
	Ext.create('Ext.Button', {
	    text: '+',
	    renderTo: 'ajoutRgpt',
	    handler: function() {}
	});
	var ajoutRgpt = Ext.get('ajoutRgpt'); 
	ajoutRgpt.on('click', function() {
    	ajouterRegroupement();
    });
	
	// Bouton pour ajouter une origine    
	Ext.create('Ext.Button', {
	    text: '+',
	    renderTo: 'ajoutOrigine',
	    handler: function() {}
	});
	var ajoutOrigine = Ext.get('ajoutOrigine'); 
	ajoutOrigine.on('click', function() {
    	ajouterOrigine();
    });
	
	// Bouton pour sauvegarder  
	Ext.create('Ext.Button', {
	    text: 'Sauvegarder',
	    renderTo: 'save',
	    handler: function() {}
	});
	var save = Ext.get('save'); 
	save.on('click', function(){
    	saveProduct();
    });
	
	// Bouton pour retour  
	Ext.create('Ext.Button', {
	    text: 'Retour',
	    renderTo: 'back',
	    handler: function() {}
	});
	var back = Ext.get('back'); 
	back.on('click', function(){
		window.open("./welcome.do", "_self");
    });
	
	// Bouton pour supprimer  
	Ext.create('Ext.Button', {
	    text: 'Supprimer',
	    renderTo: 'delete',
	    handler: function() {}
	});
	var deleteP = Ext.get('delete'); 
	deleteP.on('click', function(){
		deleteProduct();
    });
	
	// Evenements liés à la page 
	$(function() { 
		// Changement de produit sampilot  
	    $("#sampilotId").bind("change", function(event, ui) { 
	    	// Rafraichissement de la liste des divisions 
	    	var csProduct = $('#sampilotId').val();
	    	listeDivisions(csProduct);
	    });
	});
	
	// Mask pour la sauvegarde de l'administration 
	var maskSauvegarde = new Ext.LoadMask(Ext.getBody(), {msg:"Sauvegarde en cours, veuillez patienter ..."});
	
	// Mask pour la suppresion d'un produit  
	var maskSuppression = new Ext.LoadMask(Ext.getBody(), {msg:"Suppression en cours, veuillez patienter ..."});
	
	// Au premier appel, on recupere le parametrage 
	parametrage();
});